{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "19545db9-95e7-482a-af6a-7d423e6a29a3",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import cv2\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "acb98845-6aaa-48ca-8c5a-72f8de5ffff9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 选择图片\n",
    "# 1 2 3\n",
    "target = 3\n",
    "\n",
    "if target==1:\n",
    "    data_name = '0618'\n",
    "elif target==2:\n",
    "    data_name = '0854'\n",
    "elif target==3:\n",
    "    data_name = '1066'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "3baa39e4-64b5-4743-84a3-cfaad4a7e22b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据暂存\n",
    "features = []\n",
    "labels = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2b3c7f88-2526-4be6-97d9-cdadcf6fb115",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 用于决定采集的数据标签\n",
    "is_positive = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d84467bf-caa7-4bfc-b243-c125524ec6ff",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 鼠标回调函数\n",
    "def on_mouse(event, x, y, flags, param):\n",
    "    global features, labels, is_positive\n",
    "\n",
    "    if event == cv2.EVENT_LBUTTONDOWN:\n",
    "        color = img[y, x] # 虽然是img[y, x], 但是返回的是BGR三个通道的数值\n",
    "\n",
    "        # 根据标签决定是正样本还是负样本，标签在主函数中根据键入来更改\n",
    "        if is_positive:\n",
    "            labels.append(1)\n",
    "        else:\n",
    "            labels.append(0)\n",
    "\n",
    "        features.append(color)\n",
    "        print(f'Collected color: {color} at position: {(x, y)} with label: {labels[-1]}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "6194ef12-f067-42e7-beca-cbae197735c9",
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'cv2' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[1], line 2\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[38;5;66;03m# 开启新窗口\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m \u001b[43mcv2\u001b[49m\u001b[38;5;241m.\u001b[39mnamedWindow(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mimage\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m      3\u001b[0m cv2\u001b[38;5;241m.\u001b[39msetMouseCallback(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mimage\u001b[39m\u001b[38;5;124m\"\u001b[39m, on_mouse)\n\u001b[1;32m      4\u001b[0m \u001b[38;5;66;03m# 加载图片\u001b[39;00m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'cv2' is not defined"
     ]
    }
   ],
   "source": [
    "# 开启新窗口\n",
    "cv2.namedWindow('image')\n",
    "cv2.setMouseCallback(\"image\", on_mouse)\n",
    "# 加载图片\n",
    "img_path = f'./input_data/{data_name}.png'\n",
    "img = cv2.imread(img_path)\n",
    "img_name = os.path.splitext(os.path.basename(img_path))[0]\n",
    "\n",
    "while True:\n",
    "    cv2.imshow('image', img)\n",
    "\n",
    "    key = cv2.waitKey(1) & 0xFF\n",
    "\n",
    "    if key == ord('y'):\n",
    "        print(f\"Collecting positive samples. Press 'n' to switch, 'Esc' to stop.\")\n",
    "        is_positive = True\n",
    "    elif key == ord('n'):\n",
    "        print(f\"Collecting negative samples. Press 'y' to switch, 'Esc' to stop.\")\n",
    "        is_positive = False\n",
    "    elif key == 27:\n",
    "        print(\"Stopping data collection.\")\n",
    "        break\n",
    "# 关闭窗口\n",
    "cv2.destroyAllWindows()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "01bd6be8-fd1c-41b7-a620-d498b2c78674",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 转为numpy数组处理\n",
    "features = np.array(features)\n",
    "labels = np.array(labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "957000cf-234b-4de0-ae79-6a154e616ae7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Data has been saved to ././RGB_data/data_1066_new.csv\n"
     ]
    }
   ],
   "source": [
    "# 数据保存到 CSV 文件的函数\n",
    "def save_to_csv(features, labels, filename):\n",
    "    # 检查文件是否存在\n",
    "    if os.path.exists(filename):\n",
    "        # 读取现有的 CSV 文件\n",
    "        existing_data = pd.read_csv(filename)\n",
    "        # 将新数据转换为 DataFrame\n",
    "        new_data = pd.DataFrame({\n",
    "            'B': features[:, 0],\n",
    "            'G': features[:, 1],\n",
    "            'R': features[:, 2],\n",
    "            'Label': labels\n",
    "        })\n",
    "        # 合并数据\n",
    "        combined_data = pd.concat([existing_data, new_data], ignore_index=True)\n",
    "        # 保存合并后的数据\n",
    "        combined_data.to_csv(filename, index=False)\n",
    "    else:\n",
    "        # 如果文件不存在，直接保存新数据\n",
    "        new_data = pd.DataFrame({\n",
    "            'B': features[:, 0],\n",
    "            'G': features[:, 1],\n",
    "            'R': features[:, 2],\n",
    "            'Label': labels\n",
    "        })\n",
    "        new_data.to_csv(filename, index=False)\n",
    "\n",
    "# 采集完数据后，调用 save_to_csv 函数保存数据\n",
    "csv_filename = f'././RGB_data/data_{img_name}_new.csv'\n",
    "save_to_csv(features, labels, csv_filename)\n",
    "\n",
    "print(f'Data has been saved to {csv_filename}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c50fe90d-b333-42de-ade3-c26556277fb9",
   "metadata": {},
   "source": [
    "绘制R-G图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "6bcfc0bc-d00d-4060-bc62-7528166b320b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 绘制R-G图\n",
    "def Plot_BGR(features):\n",
    "    # 分离正负样本\n",
    "    positive_features = features[labels == 1]\n",
    "    negative_features = features[labels == 0]\n",
    "    \n",
    "    # opencv 默认提取通道是BGR -> B(0), G(1) R(2)\n",
    "    positive_R = positive_features[:, 2]\n",
    "    positive_G = positive_features[:, 1]\n",
    "    \n",
    "    negative_R = negative_features[:, 2]\n",
    "    negative_G = negative_features[:, 1]\n",
    "    \n",
    "    plt.scatter(positive_R, positive_G, color='red', label='Positive Samples')\n",
    "    plt.scatter(negative_R, negative_G, color='blue', label='Negative Samples')\n",
    "    \n",
    "    plt.title(f'R-G channel Plot of {img_name}')\n",
    "    plt.xlabel('R Channel')\n",
    "    plt.ylabel('G Channel')\n",
    "    plt.legend()\n",
    "    plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "5e0713b8-2bc2-4ac8-8839-3637f8db5f52",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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4uJQUFCAnj17ynWcnZ3h5eWF2NjYmu0wERER1Uq1Nuw0bdoU7u7uCA8PR3p6OvLz8zF79mykpqYiJSUFAJCamgpDQ0NYWVlpbOvg4IDU1NQy287Ly0NmZqbGQkRERMpUa8OOgYEBtm7diosXL8La2hqmpqaIiYmBv7//U988LoSAJEllls+aNQsqlUpeXF1dtd19IiIiqiVqbdgBgDZt2iA+Ph73799HSkoK9u3bh7t376Jhw4YAAEdHR+Tn5yM9PV1ju7S0NDg4OJTZbnh4ODIyMuQlOTm5Wo+DiIiIdKdWh51iKpUKdnZ2uHTpEk6dOoWgoCAARWHIwMAA0dHRct2UlBQkJCSgQ4cOZbZnZGQES0tLjYWIiIiUSV+XO8/KysLly5flz4mJiYiPj4e1tTXc3NywefNm2NnZwc3NDWfPnsXHH3+Mvn37yhOSVSoVRowYgQkTJsDGxgbW1taYOHEivL294evrq6vDIiIiolpEp2Hn1KlT8PHxkT+PHz8eABAaGorIyEikpKRg/PjxuH37NpycnPDOO+8gIiJCo42FCxdCX18fAwYMQE5ODrp3747IyMinzushIiKi50Otec6OLvE5O0RERHVPnX/ODhEREZE2MOwQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaLpNOwcOnQIAQEBcHZ2hiRJ2L59u0Z5VlYWRo8eDRcXF5iYmOCll17C8uXLNerk5eVhzJgxsLW1hZmZGQID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hiIyMhIAsGrVKsyaNQs3btxAkyZNMG3aNAQFBcl1c3NzERYWhg0bNiAnJwfdu3fHsmXLKjXpmLeek67wCcpERM+uot/fteY5O7rEsENERFT31Pnn7BARERFpA8MOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESkaww4REREpGsMOERERKRrDDhERESmaTsPOoUOHEBAQAGdnZ0iShO3bt2uUDxs2DJIkaSzt27fXqJOXl4cxY8bA1tYWZmZmCAwMxI0bN2rwKIiIiKg202nYyc7ORosWLbB06dIy6/Tq1QspKSnysmfPHo3ysWPHIioqCps2bcKRI0eQlZWFPn36oLCwsLq7T0RERHWAvi537u/vD39//3LrGBkZwdHRsdSyjIwMrFy5EuvWrYOvry8A4IcffoCrqyt+++03+Pn5ab3PREREVLfU+jk7MTExsLe3h6enJ9577z2kpaXJZXFxcSgoKEDPnj3ldc7OzvDy8kJsbGyZbebl5SEzM1NjISIiImWq1WHH398f69evx++//4758+fj5MmTeP3115GXlwcASE1NhaGhIaysrDS2c3BwQGpqapntzpo1CyqVSl5cXV2r9TiIiIhId3R6GetpQkJC5L97eXnhlVdegbu7O3bv3o3g4OAytxNCQJKkMsvDw8Mxfvx4+XNmZiYDDxERkULV6jM7T3JycoK7uzsuXboEAHB0dER+fj7S09M16qWlpcHBwaHMdoyMjGBpaamxEBERkTLVqbBz9+5dJCcnw8nJCQDQ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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 未标准化训练集R-G图像\n",
    "Plot_BGR(features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e23aa263-df7a-45a5-94e5-d01471b52237",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
